package com.ls.pattern.chain.simple;

public abstract class AbstractHandler {

    /**
     * 下一个处理器
     */
    private AbstractHandler nextHandler;

    /**
     * 设置下一个处理器
     */
    public AbstractHandler setNextHandler(AbstractHandler nextHandler) {
        this.nextHandler = nextHandler;
        return this;
    }

    /**
     * 处理器调用及传递到下一个处理器
     */
    public boolean handle(Context context) {
        boolean result = doHandle(context);
        if (result && nextHandler != null) {
            return nextHandler.handle(context);
        }
        return result;
    }

    /**
     * 实际的处理规则，由子类实现
     */
    public abstract boolean doHandle(Context context);

}
